package com.yc.thread;

/***
 *
 */
public class Test2_Thread {
    public static void main(String[] args) {
        System.out.println("主方法的开头");

        MyThread mt=new MyThread();
        mt.start(); //线程自启动用 start()
        //这是简写   new MyThread().start();

        //内部类
        InnerThread it=new InnerThread();
        it.start();  //启动线程要用start()  ->jvm 会自动的调用 线程中的run()方法

    }

    //因为要在 main()这个静态方法中调用 这个内部类 所以声明要加static
    //内部类写法：只有这个Test_thread这个类才会用到InnerThread
    static class InnerThread extends Thread{
        @Override
        public void run() {
            for(int i=0;i<=100;i++){
                System.out.println("内部类中j的值为"+i);
                try{
                    Thread.sleep(1000); //1s
                }catch (InterruptedException e){
                    e.printStackTrace();
                }

            }
        }
    }
}


/***
 * 方案一： 外部类 写一个类继承自Thread  重写 run() 方法  在这个方法加入耗时的操作或阻塞操作
 * MyThread.start()  ->  start0()  native  cpp  ->  run()
 */
class MyThread extends Thread{
    // run() 方法中放入要执行的任务（耗时的操作或阻塞操作）
    @Override
    public void run() {
        for(int i=0;i<=100;i++){
            System.out.println("i的值为"+i);
            try{
                Thread.sleep(1000); //1s
            }catch (InterruptedException e){
                e.printStackTrace();
            }

        }
    }
}

//java继承是单继承  所以 这样写线程极大限制类的可扩展性